package com.example.springboot.compoent;

import com.example.springboot.exception.UserNotExistException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 自定义异常处理
 *
 * @Author:ChenZhangKun
 * @Date: 2020/9/23 21:09
 */
@ControllerAdvice
@Slf4j
public class MyExceptionHandler {
    /**
     * 此时；浏览器和其他客户端返回的都是json数据
     * @param ex
     * @return
     */
/*    @ExceptionHandler(UserNotExistException.class)
    @ResponseBody
    public Map<String, Object> handlerException(Exception ex){
        Map<String,Object> map=new HashMap<>(10);
        map.put("code","user.not.exist");
        map.put("message",ex.getMessage());
        return map;
    }*/

    /**
     * 具有自适应效果
     * 根据请求客户端响应
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(UserNotExistException.class)
    public String handlerException(Exception ex, HttpServletRequest request) {
        Map<String, Object> map = new HashMap<>(10);
        // 传入自己的状态码
        // 不写入自己的状态码不会进入自己的错误解析
        request.setAttribute("javax.servlet.error.status_code", 500);
        map.put("code", "user.not.exist");
        map.put("message", ex.getMessage());
        // 将自己的信息发送到页面展示
        request.setAttribute("ext", map);
        return "forward:/error";
    }

    @ExceptionHandler({ArithmeticException.class})
    public String handleArithException(Exception ex) {
        log.error("异常是{}", ex.getMessage());
        return "发生了数学运算异常";
    }
}
